//leetcode 练习题
//给定一个仅包含数字 2 - 9 的字符串，返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
//
//给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
//
//作者：力扣(LeetCode)
//链接：https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv8ka1/
//来源：力扣（LeetCode）
//著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

vector<string> vari = { "#","#", "abc", "def", "ghi", "jkl", "mno", "pqrs","tuv","wxyz" };
vector<string> result;

void letterCom(string dig, int p, string ans)
{
    if (p == dig.size())
    {
        result.push_back(ans);
    }
    else
    {
        for (char& it : vari[(int)dig[p] - 48])
        {
            ans.push_back(it);
            letterCom(dig, p + 1, ans);
            ans.pop_back();
        }
    }

}
vector<string> letterCom(string digit)
{
    if (digit.size() == 0)
    {
        return {};

    }

    string ans;
    letterCom(digit, 0, ans);
    return result;
}



int main()
{
    letterCom("23");
    for (int i = 0;i < result.size();i++)
    {
        cout << result[i] << endl;
    }
}
